﻿#pragma once

#include "Public.h"

// 自定义正弦信号模型类
class SineModel : public ASL::ASLModel
{
public:
    // 构造函数
    SineModel();

    // 构造函数
    ~SineModel();

    // 初始化函数
    bool initialize(ASL::ASLSimulator *simulator);

    // 单步运行函数
    bool step(ASL::ASLSimulator *simulator);

public:
    // 输出型端口 输出信号 -
    ASL::ASLData *vY;

    // 参数型端口 幅值 -
    ASL::ASLData *vAmplitude;

    // 参数型端口 频率 Hz
    ASL::ASLData *vFrequency;

    // 参数型端口 偏移 deg
    ASL::ASLData *vOffset;

private:
    // 幅值 -
    double amplitude;

    // 频率 Hz
    double frequency;

    // 偏移 deg
    double offset;
};

// 自定义积分运算模型
class IntegrateModel : public ASL::ASLModel
{
public:
    // 构造函数
    IntegrateModel();

    // 析构函数
    ~IntegrateModel();

    // 初始化函数
    bool initialize(ASL::ASLSimulator *simulator);

    // 单步运行函数
    bool step(ASL::ASLSimulator *simulator);

public:
    // 输入型端口 输入信号 -
    ASL::ASLData *vU;

    // 输出型端口 输出信号 -
    ASL::ASLData *vY;

    // 参数型端口 积分初值 -
    ASL::ASLData *vInitialValue;

private:
    // 积分初值 -
    double initialValue;

    // 积分器对象
    ASL::Calculus cIntegrator;
};

// 自定义时钟模型
class ClockModel : public ASL::ASLModel
{
public:
    // 构造函数
    ClockModel();

    // 析构函数
    ~ClockModel();

    // 初始化函数
    bool initialize(ASL::ASLSimulator *simulator);

    // 单步运行
    bool step(ASL::ASLSimulator *simulator);

public:
    // 输出型端口 仿真时间 s
    ASL::ASLData *vT;

private:
};

// 自定义微分运算模型
class DerivateModel : public ASL::ASLModel
{
public:
    // 构造函数
    DerivateModel();

    // 析构函数
    ~DerivateModel();

    // 初始化函数
    bool initialize(ASL::ASLSimulator *simulator);

    // 单步运行函数
    bool step(ASL::ASLSimulator *simulator);

public:
    // 输入型端口 输入信号 -
    ASL::ASLData *vU;

    // 输出型端口 输出信号 -
    ASL::ASLData *vY;

    // 参数型端口 微分初值 -
    ASL::ASLData *vInitialValue;

private:
    // 微分初值 -
    double initialValue;

    // 微分器对象
    ASL::Calculus cDerivator;
};